/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ipartek.formacion.gestformwww.modelo.clases;

import com.ipartek.formacion.gestformwww.modelo.beans.Procedencia;
import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import com.ipartek.formacion.gestformwww.modelo.interfaces.IProcedenciaDAO;
import java.sql.*;
import java.util.ArrayList;

import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * @author Josean
 */
public class SQLServerProcedenciaDAO implements IProcedenciaDAO {

  
    private ResourceBundle rb;

    public SQLServerProcedenciaDAO() {
        rb = ResourceBundle.getBundle("com.ipartek.formacion.gestformwww.controlador.excepciones");
    }

    /**
     * @author: Alvaro y Sara
     * @param rs: ResultSet obtenido de una consulta SQL.
     * @return Devuelve una procedencia
     */
    private Procedencia instanciarProcedencia(ResultSet rs) throws SQLException {
        Procedencia procedencia = new Procedencia();
        procedencia.setProId(rs.getInt("ProId"));
        procedencia.setProDescr(rs.getString("ProDescr"));

        return procedencia;
    }

    /**
     * @author: Alvaro y Sara
     * @return Devuelve una lista de procedencias
     */
    public ArrayList<Procedencia> listarProcedencia() throws GestorFormacionExcepcion {
        ArrayList<Procedencia> procedencias = new ArrayList<Procedencia>();
        Procedencia procedencia = new Procedencia();
        Connection con;

        try {
            con = SQLServerDAOFactory.conecta();
        } catch (SQLException ex) {
            Logger.getLogger(SQLServerProcedenciaDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new GestorFormacionExcepcion(rb.getString("no-conexion"));
        }

        try {
            PreparedStatement stmt = con.prepareStatement("SELECT ProId, ProDescr FROM procedencia");
            ResultSet rs = stmt.executeQuery();
            while (rs.next()) {
                procedencia = instanciarProcedencia(rs);
                procedencias.add(procedencia);
            }
        } catch (SQLException ex) {
            Logger.getLogger(SQLServerProcedenciaDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new GestorFormacionExcepcion(rb.getString("no-sql"));
        } finally {
            SQLServerDAOFactory.desconecta(con);
        }

        return procedencias;
    }

    /*
     * Metodo que
     * @author
     * @return Devuelve el identificador de la procedencia creada
     */
    public int crearProcedencia(Procedencia pro) throws GestorFormacionExcepcion {
        Connection con;
        int id=-1;
        ResultSet rs=null;
        PreparedStatement stmt=null;

        try {
            con = SQLServerDAOFactory.conecta();
        } catch (SQLException ex) {
            Logger.getLogger(SQLServerProcedenciaDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new GestorFormacionExcepcion(rb.getString("no-conexion"));
        }

        try {
            stmt = con.prepareStatement("SELECT ProId FROM procedencia WHERE ProDescr=?");
            stmt.setString(1, pro.getProDescr());
            rs = stmt.executeQuery();
            if(!rs.next()){
                stmt = con.prepareStatement("INSERT into PROCEDENCIA (ProDescr) VALUES (?)", Statement.RETURN_GENERATED_KEYS);
                stmt.setString(1, pro.getProDescr());
                stmt.executeUpdate();
                rs = stmt.getGeneratedKeys();
                if (rs.next()) {
                    id = rs.getInt(1);
                }
            }else{
                id=rs.getInt(1);
            }
        } catch (SQLException ex) {
            Logger.getLogger(SQLServerProcedenciaDAO.class.getName()).log(Level.SEVERE, null, ex);
            throw new GestorFormacionExcepcion(rb.getString("no-sql"));
        } finally {
            SQLServerDAOFactory.desconecta(con);
        }

        return id;
    }
}